package com.cloud.observer.annotation;

import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

/**
 * 根据码文件 对redis进行读写操作
 */
@Slf4j
public class RedisFileUtils {


    static Map<String, String> map = new HashMap(){
        {
            put("A","0");
            put("B","1");
            put("D","2");
            put("C","3");
            put("E","4");
            put("F","5");
            put("P","6");
            put("G","7");
            put("R","8");
            put("S","9");
            put("Z","10");
            put("V","11");
            put("I","12");
            put("J","13");
            put("L","14");
            put("M","15");
            put("X","16");
            put("Y","17");
            put("H","18");
            put("K","19");
            put("N","20");
            put("O","21");
            put("Q","22");
            put("T","23");
            put("U","24");
            put("W","25");
            put("0","26");
            put("2","27");
            put("1","28");
            put("3","29");
            put("6","30");
            put("7","31");
            put("8","32");
            put("9","33");
            put("4","34");
            put("5","35");
            put(".","36");
            put("-","37");
            put("*","38");
            put(":","39");
            put("+","40");
            put("$","41");
        }
    };
    static Map<String, String> map2 = new HashMap(){
        {
            put("0","A");
            put("1","B");
            put("2","D");
            put("3","C");
            put("4","E");
            put("5","F");
            put("6","P");
            put("7","G");
            put("8","R");
            put("9","S");
            put("10","Z");
            put("11","V");
            put("12","I");
            put("13","J");
            put("14","L");
            put("15","M");
            put("16","X");
            put("17","Y");
            put("18","H");
            put("19","K");
            put("20","N");
            put("21","O");
            put("22","Q");
            put("23","T");
            put("24","U");
            put("25","W");
            put("26","0");
            put("27","2");
            put("28","1");
            put("29","3");
            put("30","6");
            put("31","7");
            put("32","8");
            put("33","9");
            put("34","4");
            put("35","5");
            put("36",".");
            put("37","-");
            put("38","*");
            put("39",":");
            put("40","+");
            put("41","$");
        }
    };


    /**
     * redis混淆 盖外码作为key
     * @param s
     * @return
     */
    public static String calculate(String s) {
        char[] chars = s.toCharArray();
        StringBuilder stringBuilder = new StringBuilder();
        for (char c : chars
        ) {
            String a = map.get(String.valueOf(c));
            stringBuilder.append(a+",");
        }
        return stringBuilder.toString();
    }

    /**
     * redis 反混淆 key 作为盖外码
     * @param deCode
     * @return
     */
    public static String de(String deCode) {
        StringBuilder sb = new StringBuilder();
        String[] deCodes = deCode.split(",");
        for (String s :deCodes){
            sb.append(map2.get(s));
        }
        return sb.toString();
    }

    /**
     * 获取redis的瓶外码
     * @param urlCode
     * @return
     */
    public static String getCode(String urlCode) {
        if (urlCode.toUpperCase().startsWith("HTTP")) {
            String[] code = urlCode.split("/");
            return code[code.length - 1];
        } else {
            return urlCode;
        }
    }

    /**
     * 瓶码加密
     *
     * @param urlCode
     * @return
     */
//    public static String getncrypCode(String urlCode) {
//        if (urlCode.toUpperCase().startsWith("HTTP")) {
//            String[] code = urlCode.split("/");
//            return SigEncoderv2.getDBCode(code[code.length - 1]);
//        } else {
//            return SigEncoderv2.getDBCode(urlCode);//瓶码加密urlCode;
//        }
//    }



}
